package com.r2coding.server.modules.file.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.r2coding.server.modules.file.context.CreateFolderContext;
import com.r2coding.server.modules.file.context.FileDownloadContext;
import com.r2coding.server.modules.file.context.FilePreviewContext;
import com.r2coding.server.modules.file.context.QueryFolderTreeContext;
import com.r2coding.server.modules.file.entity.UserFile;
import com.r2coding.server.modules.file.po.*;
import com.r2coding.server.modules.file.vo.FileChunkUploadVo;
import com.r2coding.server.modules.file.vo.FolderTreeNodeVo;
import com.r2coding.server.modules.file.vo.UploadedChunkVo;
import com.r2coding.server.modules.file.vo.UserFileVo;

import java.util.List;

/**
 * @author 98k灬
 * @version v1.0.0
 * @Description : 功能描述
 * @Create on : 2023/10/4 12:35
 **/
public interface IUserFileService extends IService<UserFile>  {
    /**
     * 创建文件夹信息
     *
     * @param createFolderContext 文件夹信息
     * @return 文件夹id
     */
    Long createFolder(CreateFolderContext createFolderContext);

    /**
     * 获取用户的文件列表
     *
     * @param parentId 父ID
     * @param fileTypes 文件类型
     * @return 文件列表
     */
    List<UserFileVo> getFileList(String parentId, String fileTypes);

    /**
     * 文件重命名
     *
     * @param updateFilenamePo 请求信息
     */
    void updateFilename(UpdateFilenamePo updateFilenamePo);

    /**
     * 批量删除文件
     *
     * @param deleteFilePo 请求信息
     */
    void deleteFile(DeleteFilePo deleteFilePo);

    /**
     * 文件秒传
     *
     * @param secUploadPo 请求信息
     * @return 是否秒传成功
     */
    boolean secUpload(SecUploadPo secUploadPo);

    /**
     * 单文件上传
     *
     * @param fileUploadPo 请求信息
     */
    void upload(FileUploadPo fileUploadPo);

    /**
     * 分片上传
     *
     * @param fileChunkUploadPo 请求信息
     * @return 返回信息
     */
    FileChunkUploadVo chunkUpload(FileChunkUploadPo fileChunkUploadPo);

    /**
     * 查询用户已上传的文件分片列表
     *
     * @param queryUploadedChunksPo 请求实体
     * @return 用户已上传的文件分片列表
     */
    UploadedChunkVo getUploadedChunks(QueryUploadedChunksPo queryUploadedChunksPo);

    /**
     * 文件分片合并
     *
     * @param fileChunkMergePo 请求实体
     */
    void mergeFile(FileChunkMergePo fileChunkMergePo);

    /**
     * 文件下载
     *
     * @param context 文件下载上下文实体
     */
    void download(FileDownloadContext context);

    /**
     * 文件预览
     *
     * @param context 文件预览上下文实体
     */
    void preview(FilePreviewContext context);

    /**
     * 查询用户的文件夹树
     *
     * @param context 上下文实体
     * @return 用户的文件夹树
     */
    List<FolderTreeNodeVo> getFolderTree(QueryFolderTreeContext context);

    /**
     * 文件转移
     *
     * @param transFerFilePo 请求体
     */
    void transfer(TransferFilePo transFerFilePo);

    /**
     * 文件复制
     *
     * @param copyFilePo 请求体
     */
    void copy(CopyFilePo copyFilePo);
}
